


//David Hsieh #08225
//Hoja de Trabajo #1

/**
 *
 * @author David Hsieh
 * @param <E>
 */
public class EspacioListas <E> implements InterfazEspacio<E> {

    private int cont;
    private final int CANTIDAD;
    private Nodo<E> head;

    //Método constructor de EspacioListas
    /**
     *
     * @param CANTIDAD
     */
    public EspacioListas(int CANTIDAD) {
        head = null;
        cont = 0;
        this.CANTIDAD = CANTIDAD;
    }

    //Método que devuelve la cantidad de nodos que hay
    /**
     *
     * @return
     */
    public int cantidad() {
        int contElemento = 0;

        Nodo<E> finger = head;

        while (finger != null) {
            contElemento++;
            finger = finger.getProximo();
        }

        return contElemento;
    }

    //Método que devuelve true si está vacía la lista (0 nodos)
    /**
     *
     * @return
     */
    public boolean vacio() {
        if(cantidad() == 0)
            return true;
        return false;
    }

    //Método que devuelve true si está llena la lista (Llega a CANTIDAD) 
    /**
     *
     * @return
     */
    public boolean lleno() {
        if(cantidad() >= CANTIDAD)
            return true;
        return false;
    }

    //Método que crea un nuevo nodo y le agrega el dato ingresado
    public void agregar(E dato) {
        head = new Nodo<E>(dato, head);
        cont++;
        assert head != null;
    }

    //Método que devuelve el dato del último nodo agregado, eliminando el nodo
    public E retirar() {
        Nodo<E> temp = head;
        head = head.getProximo();
        cont--;
        return temp.dato();
    }

    //Método que devuelve el dato del último nodo agregado
    /**
     *
     * @return
     */
    public E verUltimo() {
        if(head != null)
            return head.dato();
        return null;
    }

    
}